﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SharpArch.NHibernate;
using System.Web.Security;
using ADIGRE.Domain;

namespace ADIGRE.Infrastructure.Queries.Usuario
{
    public class UsuarioQuery : NHibernateQuery<Domain.Usuario>, IUsuarioQuery
    {

        public override IList<Domain.Usuario> ExecuteQuery()
        {
            throw new NotImplementedException();
        }

        public Domain.Usuario ValidateUser(Domain.Usuario Usuario)
        {
            var passwordSha1 = FormsAuthentication.HashPasswordForStoringInConfigFile(Usuario.NmSenha, "SHA1");

            var user = Session.QueryOver<Domain.Usuario>()
                .Where(x => x.NmLogin == Usuario.NmLogin && x.NmSenha == passwordSha1 && !x.IsExcluido)
                .List().FirstOrDefault();

            if (!(user.NmLogin == "root" || (user.Pessoa.IsUsuario && !user.Pessoa.IsExcluido)))
                user = null;
            if (user != null)
            {
                //log de acesso
                LogAcesso log = new LogAcesso(user);
                Session.Save(log);

            }

            return user;
        }

        public Domain.Usuario GetByUserName(string Login)
        {
            var user = Session.QueryOver<Domain.Usuario>()
                .Where(x => x.NmLogin == Login)
                .List().FirstOrDefault();
            Session.Flush();
            return user;
        }

        public IList<Domain.Usuario> GetAllUsuario()
        {
            return Session.QueryOver<Domain.Usuario>()
                .WhereNot(x => x.IsRoot && !x.IsExcluido)
                .List();
        }

        public Domain.Usuario GetRoot()
        {
            return Session.QueryOver<Domain.Usuario>()
                   .Where(x => x.IsRoot)
                   .List().FirstOrDefault(); ;
        }

    }
}